(source, id) => {

    if (!id.includes(".vue")) {
        return;
    }

    var repVModel = function (txt) {
        return txt.replace(/\sv-model="([^"]+)"/smg, (m, exp) => {
            return ` v-model="${exp}" data-bind-exp="${exp}" `
        });
    }

    var repVModelTrim = function (txt) {
        return txt.replace(/\sv-model.trim="([^"]+)"/smg, (m, exp) => {
            return ` v-model.trim="${exp}"  data-bind-exp="${exp}" `
        });
    }


    var repChk = function (txt) {
        return txt.replace(/\schk="([^"]+)"/smg, (m, exp) => {
            return ` data-chk-exp="${exp}" `
        });
    }

    var repChkMsg = function (txt) {
        return txt.replace(/\schk-msg="([^"]+)"/smg, (m, exp) => {
            return ` data-chk-msg="${exp}" `
        });
    }


    var txt = source
        .replaceAll("@npm_package_name@", process.env.npm_package_name)
        .replaceAll("@npm_package_description@", process.env.npm_package_description)
        .replaceAll("@BUILD_AT@", (new Date()).toLocaleString());


    txt = repVModel(txt);
    txt = repVModelTrim(txt);
    txt = repChk(txt);
    txt = repChkMsg(txt);

    return txt;

}